2 Problem: 10482 - The Candyman can
14 const int SIZE
= 40, MAXN
= 32;
17 dp[i][a][b] = verdadero si puedo repartir las primeras
18 i monedas en tres grupos tales que el grupo con mayor peso
19 tenga a unidades más que el grupo con menos peso & el grupo
20 de la mitad tenga b unidades más que el grupo con menos peso
22 bool dp
[MAXN
][SIZE
+1][SIZE
+1];
27 for (int C
=1; C
<=Casos
; C
++){
31 for (int i
=0; i
<n
; ++i
){
38 for (int i
=0; i
<n
; ++i
)
39 for (int a
=0; a
<=sum
; ++a
)
40 for (int b
=0; b
<=sum
; ++b
)
43 cout
<< "Case " << C
<< ": ";
44 //cout << "Sum: " << sum << endl;
47 dp
[0][w
[0]][0] = true;
48 for (int i
=0; i
<n
-1; ++i
)
49 for (int a
=0; a
<=sum
; ++a
)
50 for (int b
=0; b
<=sum
; ++b
)
52 for (int j
=0; j
<3; ++j
){
54 t
[0] = a
, t
[1] = b
, t
[2] = 0;
56 sort(t
.begin(), t
.end());
57 if (t
[2] - t
[0] <= sum
){
58 dp
[i
+1][t
[2] - t
[0]][t
[1] - t
[0]] = true;
63 for (int a
=0; a
<=sum
&& answer
== -1; ++a
)
64 for (int b
=0; b
<=a
&& answer
== -1; ++b
)
69 cout
<< answer
<< endl
;
70 if (answer
== -1) while (true) cout
<< "error ";